<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    // 功能
    // 参数
    // 返回值
    // 是否改变原数组


    // 1. arr.indexOf()
    // var arr = [3,4,5,6,5,4,3,4,5,6];
    // console.log(arr);
    // var res = arr.indexOf(4);
    // var res = arr.indexOf(4, 2);
    // var res = arr.indexOf(4, 6);
    // var res = arr.indexOf(4, 8);
    // console.log(res);
    // console.log(arr);


    // 2. arr.forEach()
    // 功能：遍历数组
    // 参数：回调函数，这个函数有三个形参
        // 形参1：表示数组中的数据
        // 形参2：表示数据对应的索引
        // 形参3：表示数组自身
    // 返回值：无，undefined
    // var arr = ["hello", 5, 6, 7, "world"];
    // console.log(arr);
    // var res = arr.forEach( function( val, idx, self ){
    //     // console.log(val, idx, self);
    //     console.log(val);
    //     return "hahaha"
    // } );
    // console.log(res);
    // console.log(arr);


    // 3. arr.map()
    // 功能：遍历数组，并获取回调函数每次执行时的返回值
    // 参数：回调函数，这个函数有三个形参
        // 形参1：表示数组中的数据
        // 形参2：表示数据对应的索引
        // 形参3：表示数组自身
    // 返回值：一个新数组，数组内保存了每次回调函数的返回值
    // var arr = ["hello", 5, 6, 7, "world"];
    // console.log(arr);
    // var res = arr.map( function( val, idx, self ){
    //     console.log(val, idx, self);
    //     return val *= 1.5;
    // } );
    // console.log(res);
    // console.log(arr);
    // console.log(arr === res);


    // 4. arr.filter()
    // 功能：遍历数组，并获取回调函数每次执行返回值为true时，遍历到的值
    // 参数：回调函数，这个函数有三个形参
        // 形参1：表示数组中的数据
        // 形参2：表示数据对应的索引
        // 形参3：表示数组自身
    // 返回值：一个新数组，内保存的是，回调函数返回值为true时，遍历到的值
    // var arr = ["hello", 5, 6, 7, "world"];
    // console.log(arr);
    // var res = arr.filter( function( val, idx, self ){
    //     console.log(val, idx, self);
    //     return idx%2 === 0;
    // } );
    // console.log(res);
    // console.log(arr);
    // console.log(arr === res);


    // 5. arr.some()
    // 功能：遍历数组，回调函数如果每次都是返回false，some的返回值就是false，只要有一次返回true，some的返回值就是true
    // 参数：回调函数，这个函数有三个形参
        // 形参1：表示数组中的数据
        // 形参2：表示数据对应的索引
        // 形参3：表示数组自身
    // 返回值：布尔值
    // var arr = ["hello", 5, 6, 7, "world"];
    // console.log(arr);
    // var res = arr.some( function( val, idx, self ){
    //     console.log(val, idx, self);
    //     return typeof val === "number";
    // } );
    // console.log(res);
    // console.log(arr);
    

    // 6. arr.every()
    // 功能：遍历数组，回调函数如果每次都是返回true，every的返回值就是true，只要有一次返回false，every的返回值就是false
    // 参数：回调函数，这个函数有三个形参
        // 形参1：表示数组中的数据
        // 形参2：表示数据对应的索引
        // 形参3：表示数组自身
    // 返回值：布尔值
    // var arr = ["hello", 5, 6, 7, "world"];
    // console.log(arr);
    // var res = arr.every( function( val, idx, self ){
    //     console.log(val, idx, self);
    //     return true;
    // } );
    // console.log(res);
    // console.log(arr);



    // 7. arr.reduce()
    // 功能：从左向右依次归并
    // 参数：
        // 情况1：
        //     实参：回调函数，回调函数有四个形参，数组中有几个数据回调函数就执行几次
        //         形参1：回调函数第一次执行时，数组的第一个数据，之后的每次执行是上一次回调函数的返回值
        //         形参2：回调函数第一次执行时为数组的第二个数据，之后的每次执行依次向后获取数组的数据
        //         形参3：数组中数据的索引
        //         形参4：数组自身
        // var arr = ["hello", 5, 6, 7, "world"];
        // console.log(arr);
        // var res = arr.reduce( function(prev, val, idx, self ){
        //     console.log(prev, val, idx, self);
        //     return idx;
        // } );
        // console.log(res);
        // console.log(arr);

        // 情况2：
            // 实参1：回调函数，回调函数有四个形参，数组中有几个数据回调函数就执行几次
                // 形参1：回调函数第一次执行时，就是reduce的实参2；之后的每次执行是上一次回调函数的返回值
                // 形参2：就是数组中的每一个数据
                // 形参3：数组中数据的索引
                // 形参4：数组自身
            // 实参2：数据，用来给回调函数第一次执行时的形参1赋值
    // 返回值：是最后一个回调函数的返回值
    // var arr = ["hello", 5, 6, 7, "world"];
    // console.log(arr);
    // var res = arr.reduce( function(prev, val, idx, self ){
    //     console.log(prev, val, idx, self);
    //     return "abc"
    // }, "haha" );
    // console.log(res);
    // console.log(arr);


    // 应用：快速统计数组中数据
    // var arr = [3,4,5,6,7];
    // var sum = arr.reduce(function(prev, val){
    //     return prev + val;
    // })
    // console.log(sum);





    // 8. arr.reduceRight()
    // 从右向左依次归并



</script>
</html>